%{
#define __USE_GNU
#define GNU
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "parser.h"
#include "parsery.h"
#include "end.h"

char * sujeito, * objeto,*raiz,*class;
int genero,numero,tok,fs;
#ifdef PARSER
	struct word_t * a_word;
#endif
#ifdef SCANNER
	#include <gdsl/gdsl_list.h>
		gdsl_list_t segmentos,list;
		word tmp_word;
#endif

%}
INICIOFRASE "<s>"

TESTE "</s>"

RAIZ  \[[[:alnum:]]*\]

SUJEITO "@SUBJ"

GENERO "M/F "|"M "|"F "

NUMERO "S/P "|"S "|"P "

OBJETO "@<ACC"

NOMES "N "|"PROP "|"PERS "|"NUM "

ARTIGO "DET "

ADJETIVO "ADJ "

ADVERBIO "ADV "

PREPOSICAO "PRP "

VERBOS "V "



newline "\n"

%%


{TESTE} { 
	puts("teste");
	puts("fimfrase");
	#ifdef SCANNER
		gdsl_list_insert_tail(segmentos,list);
	#endif
	#ifdef PARSER
		return PONTO;
	#endif
}

{INICIOFRASE} {
	#ifdef SCANNER
		list = gdsl_list_alloc("",NULL,NULL);
	#endif
}




{RAIZ} {
	#ifdef DEBUG
		printf("Raiz: %s\n",yytext);
	#endif
	asprintf(&raiz,"%s\0",strndup(yytext+1,strlen(yytext)-2));
	
}

{SUJEITO} {
	  asprintf(&sujeito,"%s",raiz);
	  tok = NOME;
	puts(" SUJEITO ");
}

{GENERO} {
	if(strcasecmp("m ",yytext)==0)
		genero=MASCULINO;
	else{
		if(strcasecmp("f ",yytext)==0)
			genero = FEMININO;
		else
			genero=IND;
	}
	#ifdef DEBUG
		puts(yytext);
		printf("genero = \"%d\"",genero);
	#endif
}

{NUMERO} {
	if(strcasecmp("s ",yytext)==0)
		numero=SINGULAR;
	else{
		if(strcasecmp("p ",yytext)==0)
			numero = PLURAL;
		else
			numero=IND;
	}
	#ifdef DEBUG
		puts(yytext);
		printf("numero = \"%d\"",numero);
	#endif
}

{OBJETO} {
	asprintf(&objeto,"%s",raiz);
	puts(" OBJETO ");
}

{NOMES} {
	class = yytext;
	tok = NOME;
	puts(" NOME ");
}

{ARTIGO} { 
	class=yytext; 
	tok=ARTIGO;
	puts(" ARTIGO ");
}

{ADJETIVO} {
	class=yytext; 
	tok = ADJETIVO;
	puts(" ADJETIVO ");
}

{ADVERBIO} {
	class = yytext;
	tok = ADVERBIO;
	puts(" ADVERBIO ");
}

{PREPOSICAO} {
	class = yytext; 
	tok = PREPOSICAO;
	puts(" PREPOSICAO ");
}

{VERBOS} {
	class = yytext; 
	tok =  VERBO;
	puts("VERBO");
}

{newline} {
	#ifdef PARSER
	if(class!=NULL){
		a_word = new_word(raiz,class,raiz);
		yylval.w = a_word;
		printf("palavra : %s %s \n",a_word->root,a_word->type);
		//return tok;
	}
	#endif
	#ifdef SCANNER
		if(raiz && sujeito && (strcmp(raiz,sujeito)==0)){
			fs = SUJEITO;
		}
		if(raiz && objeto && (strcmp(raiz,objeto)==0)){
			fs = OBJETO;
		}
		if(raiz){
			tmp_word =  create_word();
			tmp_word->termo = raiz;
			tmp_word->funcao_sintatica = fs;
			tmp_word->genero=genero;
			tmp_word->numero=numero;
			//if(tok == NOME)
				tmp_word->classificacao=SND;
			
			gdsl_list_insert_tail(list,tmp_word);
		}
		tmp_word=NULL;
		genero=-1;
		numero=-1;
		fs=-1;
		raiz=NULL;
		sujeito=NULL;
		objeto=NULL;
	#endif
	puts(" nl");
}
